// 包声明：指定当前类所在的文件夹路径，com.itheima.demo表示在com/itheima/demo文件夹下
package com.itheima.demo;

// 导入Scanner类，用于从控制台获取用户输入
import java.util.Scanner;

// public：访问修饰符，表示这个类可以被任何地方访问
// class：关键字，用于定义一个类
// AllTest：类名，代表一个综合测试类
public class AllTest {
    // public：方法可以被任何地方访问
    // static：静态方法，可以通过类名直接调用，不需要创建对象
    // void：返回值类型，表示方法不返回任何值
    // main：主方法名，是程序的入口点
    // String[] args：方法参数，接收命令行参数的字符串数组
    public static void main(String[] args) {
        // 目标：完成健康计算器。
        // 创建Scanner对象，用于读取用户的输入
        // Scanner：输入扫描器类
        // sc：变量名，用于引用Scanner对象
        // new Scanner(System.in)：创建Scanner对象，参数System.in表示从标准输入（键盘）读取数据
        Scanner sc = new Scanner(System.in);
        // 1、先让用户输入自己的个人信息：身高、体重、性别、年龄
        // 输出提示信息，让用户输入身高
        System.out.println("请您输入您的身高：");
        // 声明double类型的height变量，并从用户输入中读取一个双精度浮点数赋值给它
        // nextDouble()：从输入中读取下一个double类型的数值
        double height = sc.nextDouble();

        // 输出提示信息，让用户输入体重
        System.out.println("请您输入您的体重：");
        // 声明double类型的weight变量，并从用户输入中读取一个双精度浮点数赋值给它
        double weight = sc.nextDouble();

        // 输出提示信息，让用户输入性别
        System.out.println("请您输入您的性别（男/女）：");
        // 声明String类型的sex变量，并从用户输入中读取一个字符串赋值给它
        // next()：从输入中读取下一个字符串（遇到空格、制表符或换行符时停止）
        String sex = sc.next(); // "男"

        // 输出提示信息，让用户输入年龄
        System.out.println("请您输入您的年龄：");
        // 声明int类型的age变量，并从用户输入中读取一个整数赋值给它
        // nextInt()：从输入中读取下一个int类型的数值
        int age = sc.nextInt();

        // 调用calcBMI方法计算BMI指数，并将结果存储在bmi变量中
        // calcBMI(height, weight)：调用方法并传入身高和体重参数
        double bmi = calcBMI(height, weight);
        // 输出计算得到的BMI值
        // +：字符串连接运算符，将字符串和数值连接起来
        System.out.println("您的bmi值是：" + bmi);

        // 判断用户的bmi值的情况。。。

        // 调用calcBMR方法计算基础代谢率(BMR)，并将结果存储在bmr变量中
        // calcBMR(height, weight, sex, age)：调用方法并传入身高、体重、性别和年龄参数
        double bmr = calcBMR(height, weight, sex, age);
        // 输出计算得到的BMR值
        System.out.println("您的bmr值是：" + bmr);

        // 判断bmr的情况。。。
    }

    // 2、根据个人信息，计算BMI指数（把数据交给一个独立的方法来计算并返回这个结果）
    // public：方法可以被任何地方访问
    // static：静态方法，可以通过类名直接调用
    // double：返回值类型，表示方法会返回一个double类型的值
    // calcBMI：方法名，用于计算BMI指数
    // double height：参数1，表示身高
    // double weight：参数2，表示体重
    public static double calcBMI(double height, double weight) {
        // BMI计算公式：体重(kg)除以身高(m)的平方
        // return：返回计算结果给调用者
        return weight / (height * height);
    }

    // 3、根据个人信息，计算BMR指数（把数据交给一个独立的方法来计算并返回这个结果）
    // public：方法可以被任何地方访问
    // static：静态方法，可以通过类名直接调用
    // double：返回值类型，表示方法会返回一个double类型的值
    // calcBMR：方法名，用于计算基础代谢率(BMR)
    // double height：参数1，表示身高
    // double weight：参数2，表示体重
    // String sex：参数3，表示性别
    // int age：参数4，表示年龄
    public static double calcBMR(double height, double weight, String sex, int age) {
        // 声明一个double类型的变量bmr，用于存储计算结果，初始值为0
        double bmr = 0;
        // if条件判断：检查性别是否为"男"
        // "男".equals(sex)：安全的字符串比较方式，避免空指针异常
        if ("男".equals(sex)) {
            // 男性BMR计算公式
            bmr = 88.362 + (13.397 * weight + 4.799 * height - 5.677 * age);
        } else {
            // 女性BMR计算公式（默认情况）
            bmr = 447.593 + (9.247 * weight + 3.098 * height - 4.330 * age);
        }
        // 返回计算得到的BMR值给调用者
        return bmr;
    }
}
